Модуль:Factory
local p = {} local arrData = mw.loadData( 'Module:DataFactory' ) local crops = mw.loadData( 'Module:DataCrops' ) local animal = mw.loadData( 'Module:DataAnimal' ) local tree = mw.loadData( 'Module:DataTree' ) local materials = mw.loadData( 'Module:DataMaterials' ) local buybase local id --Карточка фабрики-- function p.getView( frame ) id = frame.args1 return path().. infobox().. description().. placeBuy().. location().. build().. hr().. Factoryres().. port() end function path() local root = mw.html.create( 'div' ) :css('font-size', '12px') :css('margin-bottom', '10px') :wikitext('Фабрики / '..id) return tostring( root ) end function infobox() local root = mw.html.create( 'div' ) :addClass('infobox-crop') root:tag( 'div' ) :addClass('infobox-crop-h') :wikitext(id) root:tag( 'div' ) :attr('id','img-tree') :wikitext('center') root:tag( 'div' ) :addClass('item-spacing') :addClass('item-border') :tag( 'div' ) :addClass('item-label') :wikitext('Категория') :tag( 'div' ) :addClass('item-data') :wikitext('Фабрики') root:tag( 'div' ) :addClass('item-spacing') :addClass('item-border') :tag( 'div' ) :addClass('item-label') :wikitext('Строительство') :tag( 'div' ) :addClass('item-data') :wikitext(arrDataid.materials and 'Требуется' or 'Не требуется') root:tag( 'div' ) :addClass('item-spacing') :addClass('item-border') :tag( 'div' ) :addClass('item-label') :wikitext('Локация') :tag( 'div' ) :addClass('item-data') :wikitext(arrDataid.location and '[['..arrDataid.location..']]' or 'Любая') root:tag( 'div' ) :tag( 'div' ) :addClass('infobox-crop-h-section') :wikitext('Продукция') root:tag( 'div' ) :addClass('item-spacing') :addClass('item-border') :tag( 'div' ) :addClass('item-label') :wikitext('Время производства') :tag( 'div' ) :addClass('item-data') :wikitext(arrDataid.tm..' мин') root:tag( 'div' ) :addClass('item-spacing') :addClass('item-border') :tag( 'div' ) :addClass('item-label') :wikitext('Количество') :tag( 'div' ) :addClass('item-data') :wikitext(arrDataid.c) return tostring( root ) end function description() local text=' Описание '.. ' Фабрика производит продукцию, которую можно продать за монеты или загрузить в качестве сырья на другую фабрику. '.. ' Для того чтобы фабрика заработала, ее необходимо: '.. ' ' text=text..(arrDataid.shop and ' Купить или получить в подарок ' or ' Купить ') if (pcall(function () if arrDataid.materials nil then error() end end)) then text=text..' Построить ' end if (pcall(function () if arrDataid.friend nil then error() end end)) then text=text..' Нанять друзей ' end text=text..' ' if (arrDataid.level~=0 or arrDataid.levelagro~=0 or arrDataid.buy~=0 or arrDataid.buyagro~=0) then text=text..' Фабрику можно купить:'.. ' ' if (arrDataid.buy~=0 or arrDataid.level~=0) then text=text..' ' if arrDataid.level~=0 then text=text..'с '..arrDataid.level..' уровня ' end if arrDataid.buy~=0 then text=text..'за '..arrDataid.buy..' 15px' end text=text..' ' end if (arrDataid.buyagro~=0 or arrDataid.levelagro~=0) then text=text..' ' if arrDataid.levelagro~=0 then text=text..'с '..arrDataid.levelagro..' уровня ' end if arrDataid.buyagro~=0 then text=text..'за '..arrDataid.buyagro..' 15px' end text=text..' ' end text=text..' ' end text=text..' Время производства 1 единицы продукции составлет '..arrDataid.tm..' мин. '.. ' Одновременно на фабрику можно загрузить сырье для производства '..arrDataid.c..' единиц продукции. ' if arrDataid.exper~=0 then text=text..' При покупке фабрики начисляется опыт: '..arrDataid.exper..' . ' end if arrDataid.del~=0 then text=text..' При удалении фабрики начисляется компенсация в размере '..arrDataid.del..' 15px. ' end return text end function placeBuy() local root = mw.html.create( 'div' ) root:tag( 'h2' ) :wikitext('Место покупки фабрики') root:tag( 'div' ) :wikitext(arrDataid.shop and ' '..arrDataid.shop..' ' or ' Фабрику можно купить в Магазине. ') return tostring( root ) end function location() local root = mw.html.create( 'div' ) root:tag( 'h2' ) :wikitext('Локация') root:tag( 'div' ) :wikitext(arrDataid.location and 'Фабрику можно построить только в локации [['..arrDataid.location..']].' or 'Фабрику можно построить в любой локации, в которой есть Промзона или зона Поле.') return tostring( root ) end --найм персонала на фабрику-- function hr() if (not pcall(function () if arrDataid.friend nil then error() end end)) then return "" end local root = mw.html.create( 'div' ) root:tag( 'h2' ) :wikitext('Нанять друзей') root:tag( 'div' ) :wikitext('Фабрика начнет работать только после найма персонала.') root:tag( 'div' ) :wikitext('Пригласите своих друзей на должности:') local ul=root:tag( 'ul' ) for k,v in pairs(arrDataid.friend) do ul:tag( 'li' ) :wikitext(v) end root:tag( 'div' ) :wikitext('Как только ваши друзья примут приглашения, вы сможете начать производить продукцию на вашей фабрике.') return tostring( root ) end --Улучшение в Порту-- function port() local root = mw.html.create( 'div' ) root:tag( 'h2' ) :wikitext('Улучшение в Торговом порту') root:tag( 'div' ) :wikitext(arrDataid.port and 'Фабрику можно улучшить в Торговом порту.' or 'Фабрику нельзя улучшить в Торговом порту.') root:tag( 'div' ) :wikitext('Что можно улучшить?') root:tag( 'div' ) :wikitext(arrDataid.port1.tm 0 and 'Для данной фабрики можно увеличить количество загружаемого сырья с 3 до 6.' or 'Для данной фабрики можно уменьшить время производства 1 ед. продукции.') root:tag( 'div' ) :wikitext('Всего можно улучшить 8 фабрик на одной локации.') local c,tm=arrDataid.c, arrDataid.tm local co local tb=root:tag('table') :addClass('article-table') :tag('thead') :tag('tr') :tag('th') :css('width','10%') :wikitext('Уровень') :tag('th') :css('width','15%') :wikitext('Цена 15px ') :tag('th') :css('width','15%') :wikitext('Цена 15px<') :tag('th') :wikitext(arrDataid.port1.tm 0 and 'Количество сырья, загружаемого за 1 раз' or 'Время производства продукции в минутах') local tbody=tb:tag('tbody') for i,v in ipairs(arrDataid.port) do tb:tag('tr') :tag('td') :wikitext(v.level) :tag('td') :wikitext(v.buy) :tag('td') :wikitext(v.buy1) :tag('td') :wikitext(v.tm 0 and v.vol or v.tm) co=i-1 end return tostring( root )..require("Module:Gallery").Gallery(id,co) end --Стройматериалы-- function build() local text=' Строительство ' if (pcall(function () if arrDataid.materials nil then error() end end)) then text=text..' После покупки фабрику необходимо еще построить, для этого нужно будет купить материалы. ' else if (arrDataid.location "Остров технологий") then return "" else text=text..'Фабрика строится мгновенно, сразу же при покупке. Материалы для постройки фабрики не нужны.' end return text end text=text..' '.. ' '.. ' '.. ' Материалы '.. ' Количество '.. ' Цена 15px '.. ' Стоимость 15px '.. ' ' local total=0 for i,v in ipairs(arrDataid.materials) do --Проверка на наличие материалов в модуле-- local ok, msg = pcall(function () if materialsv.name.buy nil then error() end end) if ok then text= text..' '.. ' 50px '.. ' '..v.name..' '.. ' '..v.c..' '.. ' '..materialsv.name.buy..' '.. ' '..materialsv.name.buy*v.c..' '.. ' ' total=total+materialsv.name.buy*v.c else text= text..' '.. ' '..v.name..' '.. ' '.. ' '.. ' '.. 'Категория: Проверить' end i=i+1 end text= text..' '.. ' Итого: '.. ' '.. ' '.. ' '.. ' '..total..' '.. ' ' text=text..' ' return text end --Производимая продукция и ресурсы-- function Factoryres() --Составляем массив для столбца с ресурсами-- data = {} --Преобразуем деревья-- for key,v in pairs(tree) do if (pcall(function () if v.nameprod nil then error() end end)) then datav.nameprod={buy=v.sell,fab=key,name=v.nameprod} else datakey={buy=v.sell,fab=key,name=v.name} end end --Преобразуем животных-- for key,v in pairs(animal) do datav.nameprod={buy=v.sell,fab=v.nameprod,name=v.nameprod} end --Преобразуем продукцию фабрик-- for key,v in pairs(arrData) do for i,v1 in ipairs(v.resources) do datav1.nameprod={buy=v1.sell,name=v1.nameprod,fab=key} end end --Добавляем семена-- for key,v in pairs(crops) do datakey={name=v.name,fab=key} local ok, msg = pcall(function () if cropspkey.agronom nil then error() end end) datakey.buy= ok and v.buy or v.sell end local text='' local total=0 text=text..' Производство '.. ' Для того чтобы произвести продукцию, на фабрику загружается сырье, а затем собирается готовая продукция. '.. ' В следующей таблице находится список сырья и производимых товаров. ' --Добавляется основной ресурс-- text=text..baseres().. ' '.. ' Всего: total '.. ' '.. ' '.. ' Сырье '.. ' Цена 15px '.. ' '.. ' Продукция '.. ' Цена 15px '.. ' Доход 15px '.. ' ' --Добавляются столбцы с ресурсами- for i,v in ipairs(arrDataid.resources) do local nameres1=v.nameres1 text=text..' ' --Проверка на наличие ресурса в БД-- if (pcall(function () if datanameres1.name nil then error() end end)) then text=text..' [[Файл:'..datanameres1.name..'.png|50px]] '.. ' [['..datanameres1.fab..'|'..datanameres1.name..']] '.. ' '..datanameres1.buy..' ' else text=text..' 50px '.. ' '..nameres1..' '.. ' - '.. 'Категория: Проверить' end --Добавлется строка для фабрики с 3 ресурсами-- if (pcall(function () if datanameres2.name nil then error() end end)) then text=text..' '.. ' [[Файл:'..datanameres1.name..'.png|50px]] '.. ' [['..datanameres1.fab..'|'..datanameres1.name..']] '.. ' '..datanameres1.buy..' '.. ' ' end --Добавляются столбцы с продукцией- text=text.. ' 50px '.. ' '..v.nameprod..' '.. ' '..v.sell..' '.. ' ' if (pcall(function () if datanameres1.name nil then error() end end)) then text=text..(math.floor((v.sell-datanameres1.buy-buybase)*100)/100) else text=text..'-' end text=text..' ' i=i+1 total=i-1 end text=string.gsub (text, "total", total)..' ' return text end --Добавляется основной ресурс-- function baseres() local text='' buybase=0 --Наличие базового ресурса-- if (not pcall(function () if arrDataid.resourcebase nil then error() end end)) then return text end text=text..' Для производства продукции на эту фабрику необходимо загружать два вида сырья: основное и сменяемое сырье. Основное сырье - сырье, которое требуется для производства каждой единицы продукции. Сменяемое сырье – сырье, которое меняется для производства каждого вида товара. '.. ' '.. ' '.. ' '.. ' Основное сырье '.. ' Цена 15px '.. ' ' for i,v in ipairs(arrDataid.resourcebase) do text=text..' '.. ' 50px ' if (pcall(function () if datav.name.name nil then error() end end)) then text=text.. ' [['..datav.name.fab..'|'..v.name..']] '.. ' '..datav.name.buy..' ' buybase=buybase+datav.name.buy else text=text.. ' '..v.name..' '.. ' - '.. 'Категория: Проверить' end text=text..' ' end return text..' Итого: '..buybase..' ' end --Список фабрик на которых можно переработать продукт frame-- function p.fab(frame) local id='' if type(frame) 'string' then id=frame elseif type(frame) 'table' then id= frame.args1 end local text='' local text1='' local rb=false local arrData = mw.loadData( 'Module:DataFactory' ) for key,v in pairs(arrData) do text=' ' local ok, msg = pcall(function () if v.resourcebase nil then error() end end) if ok then for key1,v1 in pairs(v.resourcebase) do if v1.name id then text1=text1..' '..key..' ' rb=true break end end end if not rb then for key2,v2 in pairs(v.resources) do if v2.nameres1 id then text1=text1..' '..key..' ' break end end end text=text..text1..' ' end if text1~='' then text=' Продукт можно переработать на фабриках: '..text..' ' else text=' Продукт можно переработать на фабриках: Пока нет информации ' end return text end --Список продукции фабрик-- function p.product() local text=' ' local product={} local j=1 for key,v in pairs(arrData) do for i,v1 in ipairs(v.resources) do productj={} productj.fab=key productj.name=v1.nameprod j=j+1 end end table.sort(product,function( a, b ) return a.name < b.name end ) for i,v in ipairs(product) do if i 1 then text=text....string.sub (v.name, 1,2)..' ' else if string.sub (producti.name, 1,2)>string.sub (producti-1.name, 1,2) then text=text..' '....string.sub (v.name, 1,2)..' ' end end text=text..' '..v.name..' ' end text=text..' ' return text end --Общий список фабрик-- function p.list() local data1 = mw.loadData( 'Module:DatalistFactory' ) local data={} for i,v in pairs(data1) do datai=v end table.sort(data, function(a, b) return a < b end) local text=' ' for i,v in ipairs(data) do text=text..' '..v..' ' end text=text..' ' return text end return p